package fr.uparis10.miage.classic.m1.p3;
import java.util.ArrayList;
import java.util.Calendar;
import fr.uparis10.miage.m1p1.core.Projet;
import fr.uparis10.miage.m1p1.core.Employe;
import fr.uparis10.miage.m1p1.employes.Ingenieur;
import fr.uparis10.miage.m1p1.employes.ChefProjet;
import fr.uparis10.miage.m1p1.employes.DirecteurDepartement;
public class ObjectJ {
	private double chiffreAffaire;
	private int saveno;
	private String region;
	private ArrayList<Departement> dept;
	private String pdg;
		/**
		 * constructeur
		 * @param chiffreAffaire
		 * @param saveno
		 * @param region
		 * @param pdg
		 */

	public ObjectJ(double chiffreAffaire,int saveno,String region,String pdg)
		   {
		     super();
		     this.setChiffreAffaire(chiffreAffaire);
		     this.setSaveno(saveno);
		     this.setRegion(region);
		     this.setPdg(pdg);
		     this.dept = new ArrayList <Departement>();
		   }/**
		      *ajout ddu departement a la liste Departement
		      */
	          	   
	public boolean addDepartement(Departement newDepartement){
		if (dept.contains(newDepartement)){
			return false;
		}
	       return dept.add(newDepartement); 
	}
    /**
     * les differents departement de l'entreprise ObjectJ
     * 
     */
	public ArrayList<Departement> getDeptement()
		   {
		      return dept;

		   }
	/**
	 * ici les differents DirecteurDepartement des departement ci dessus   
	 * 
	 */
	public DirecteurDepartement[] getDirectement(){
		ArrayList<DirecteurDepartement> dd = new ArrayList<DirecteurDepartement>();
		for(Departement d:dept)
			dd.add(d.getDirecteurDepartement());
		return (DirecteurDepartement[])dd.toArray();
		
	}
  /**
   * les employés de chaque departement leur poste et leur salaire
   * 
   */
	public String getEmployeDepartement(){
		StringBuffer tmp = new StringBuffer();
		for(Departement d:dept)
			tmp.append(d.afficheEmploye());
		return tmp.toString();
	}
  /**
   * le nombre d'employe dans l'entreprise
   * 
   */
	public int nombreEmploye(){
		int nb = 0;
		for(Departement d:dept)
			/**
			 * faire la somme du nombre d'employé de chaque departement 
			 */
		    nb += d.getNbEmploye();
		return nb;
	}
	/**
	 * la liste globale des employés 
	 */
	public ArrayList<Employe> getListeEmploye(){
		ArrayList<Employe> listEmploye = new ArrayList<Employe>();
				for(Departement d:dept){
			/**
			 * pour chaque departement recuperer les employés  dans la liste tmp 
			 */
			listEmploye.addAll(d.getEmploye());
			
			}
				return listEmploye;
	   }
		
	
	/*nombre d'ingenieur*/
	public int nombreIngenieur(){
		int nb = 0;
		for(Departement d:dept)
			/*faire la somme du nombre d'ingenieur de chaque departement */
			nb += d.getNbIngenieur();
		return nb;
	}
  /*la liste des ingenieurs*/
	public ArrayList<Ingenieur> getListeIngenieur(){
		ArrayList<Ingenieur> listIngenieur = new ArrayList<Ingenieur>();
		for(Departement d:dept){
			/*pour chaque departement recuperer les ingenieurs  dans la liste tmp */
			listIngenieur = d.getIngenieur();
			
	   }
		return listIngenieur;
	}
	/*liste des  Chefs de projets*/
	public ArrayList<ChefProjet> getListeChefProjet(){
		ArrayList<ChefProjet> listChefProjet = new ArrayList<ChefProjet>();
		for(Departement d:dept){
			/*pour chaque departement recuperer les ChefProjet  dans la liste tmp */
			listChefProjet = d.getChefProjet();
		}
		return listChefProjet;
	}
	/*les projets encours*/
	public ArrayList<Projet> getProjetEncours(){
		ArrayList<Projet> pr = new ArrayList<Projet>();
		ArrayList<Projet> tmp;
		for(Departement d:dept){
			tmp = d.getProjet();
			for(Projet p:tmp)
				if((p.getDateFin().getTime())- (Calendar.getInstance().getTime().getTime()) > 0 )
					pr.add(p);
		}
		return pr;
		
			
	}
	public String toString(){
		StringBuffer tmp = new StringBuffer();
		tmp.append("Chiffre d'affaire\t:");
		tmp.append(chiffreAffaire);
		tmp.append("\n Numero d'immatriculation\t:");
		tmp.append(saveno);
		tmp.append("\nNom region\t:");
		tmp.append(region);
		tmp.append("\nLES DEPARTEMENTS\n");
		for(Departement d:dept){
			tmp.append("\n=======================================\n");
			tmp.append(d.toString());
			tmp.append("\n=======================================\n");
						
		}
		return tmp.toString();
	}
	
	public double getChiffreAffaire()
		   {
		       return chiffreAffaire;      
		   }

	public void setChiffreAffaire(double chiffreAffaire) {
			this.chiffreAffaire = chiffreAffaire;
		}

	public void setSaveno(int saveno) {
			this.saveno = saveno;
		}

	public int getSaveno() {
			return saveno;
		}

	public void setPdg(String pdg) {
			this.pdg = pdg;
		}

	public String getPdg() {
			return pdg;
		}

	public void setRegion(String region) {
			this.region = region;
		}

	public String getRegion() {
			return region;
		}
}

